package top.kaoshanji.ch04;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import java.time.DayOfWeek;
import java.time.LocalDate;

/**
 * 代码清单 ch04-01：LocalDate类示例，显式当前月的日历
 * author kaoshanji
 * ^_^
 * create time 2024/11/24 18:30
 */
public class CalendarTest {

    private static final Logger logger = LogManager.getLogger(CalendarTest.class);

    public static void main(String[] args) {
        logger.info("...代码清单 ch04-01：LocalDate类示例，显式当前月的日历...");

        // 当前的日期
        LocalDate date = LocalDate.now();
        int month = date.getMonthValue(); // 当前月数
        int today = date.getDayOfMonth(); // 当前日数

        // 将日期对象设置为本月的1号
        date = date.minusDays(today - 1); // 减去已经过去的日期数量，就是本月月初啦
        DayOfWeek weekday = date.getDayOfWeek();
        int value = weekday.getValue(); // 本月的1号是星期几


        System.out.println("Mon Tue Wed Thu Fri Sat Sun");
        for (int i = 1; i < value; i++) {
            // 如果本月1号是星期三，那么前面星期一、二应该是空格
            System.out.print("    ");
        }

        // 此时 date 是本月的1号的日期
        while (date.getMonthValue() == month) {
            // 当前是几号
            System.out.printf("%3d", date.getDayOfMonth());

            // 当遍历到当前日数时
            if (date.getDayOfMonth() == today) {
                System.out.print("*");
            } else {
                System.out.print(" ");
            }

            // 当前日期(从本月的第一天)加一天...直到下个月结束
            date = date.plusDays(1);

            // 如果是星期一就换一行
            if (date.getDayOfWeek().getValue() == 1) {
                System.out.println();
            }
        }

        if (date.getDayOfWeek().getValue() != 1) {
            System.out.println();
        }

    }

}
